﻿// ***********************************************************************
// Apache 2.0 License
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
//
// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY 
// IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR 
// PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
//
// See the Apache Version 2.0 License for specific language governing
// permissions and limitations under the License.
// ***********************************************************************
// Assembly  : ContractMeow.Api.Dtos
// File      : Group.cs
//
// ***********************************************************************
using ContractMeow.Api.Dtos.Serialization;
using Newtonsoft.Json;
using System;

namespace ContractMeow.Api.Dtos
{
	/// <summary>
	/// Class Group
	/// </summary>
	public sealed class Group : IAutoCompleteValueEx
	{
		/// <summary>
		/// Gets or sets the created at.
		/// </summary>
		/// <value>The created at.</value>
		[JsonProperty("created_at")]
		public DateTimeOffset CreatedAt { get; set; }

		/// <summary>
		/// Gets or sets the creator id.
		/// </summary>
		/// <value>The creator id.</value>
		[JsonProperty("creator_id")]
		public Int64 CreatorId { get; set; }

		/// <summary>
		/// Gets or sets the type of the creator.
		/// </summary>
		/// <value>The type of the creator.</value>
		[JsonProperty("creator_type")]
		public String CreatorType { get; set; }

		/// <summary>
		/// Gets or sets the description.
		/// </summary>
		/// <value>The description.</value>
		[JsonProperty("description")]
		public String Description { get; set; }

		/// <summary>
		/// Gets or sets the full name.
		/// </summary>
		/// <value>The full name.</value>
		[JsonProperty("full_name")]
		public String FullName { get; set; }

		/// <summary>
		/// Gets the id.
		/// </summary>
		/// <value>The id.</value>
		[JsonProperty("id")]
		public Int64 Id { get; set; }

		/// <summary>
		/// Gets or sets the mugshot id.
		/// </summary>
		/// <value>The mugshot id.</value>
		[JsonProperty("mugshot_id")]
		public string MugshotId { get; set; }

		/// <summary>
		/// Gets or sets the mugshot URL.
		/// </summary>
		/// <value>The mugshot URL.</value>
		[JsonProperty("mugshot_url")]
		public Uri MugshotUrl { get; set; }

		/// <summary>
		/// Gets or sets the mugshot URL template.
		/// </summary>
		/// <value>The mugshot URL template.</value>
		[JsonProperty("mugshot_url_template")]
		public String MugshotUrlTemplate { get; set; }

		/// <summary>
		/// Gets or sets the name.
		/// </summary>
		/// <value>The name.</value>
		[JsonProperty("name")]
		public String Name { get; set; }

		/// <summary>
		/// Gets or sets the is public.
		/// </summary>
		/// <value>The is public.</value>
		[JsonProperty("privacy")]
		[JsonConverter(typeof(PrivacyJsonConverter))]
		public Boolean IsPublic { get; set; }

		/// <summary>
		/// Gets or sets the show in directory.
		/// </summary>
		/// <value>The show in directory.</value>
		[JsonProperty("show_in_directory")]
		public Boolean ShowInDirectory { get; set; }

		/// <summary>
		/// Gets or sets the state.
		/// </summary>
		/// <value>The state.</value>
		[JsonProperty("state")]
		public String State { get; set; }

		/// <summary>
		/// Gets or sets the stats.
		/// </summary>
		/// <value>The stats.</value>
		[JsonProperty("stats")]
		public GroupStat Stats { get; set; }

		/// <summary>
		/// Gets or sets the type.
		/// </summary>
		/// <value>The type.</value>
		[JsonProperty("type")]
		public String Type { get; set; }

		/// <summary>
		/// Gets or sets the URL.
		/// </summary>
		/// <value>The URL.</value>
		[JsonProperty("url")]
		public Uri Url { get; set; }

		/// <summary>
		/// Gets or sets the web URL.
		/// </summary>
		/// <value>The web URL.</value>
		[JsonProperty("web_url")]
		public Uri WebUrl { get; set; }
	}
}